#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

//int* getConcatenation(int* nums, int numsSize, int* returnSize)
//{
//	int n = 2 * numsSize;
//	int* ans = (int*)malloc(n * sizeof(int));
//	for (int i = 0; i < numsSize; i++)
//	{
//		ans[i] = nums[i];
//		ans[i + numsSize] = nums[i];
//	}
//	ans = (int*)realloc(ans, 2 * n * sizeof(int));
//	*returnSize = n;
//	return ans;
//}
//
//int main()
//{
//	int nums[] = { 1, 2, 1 };
//	int numsSize = sizeof(nums) / sizeof(nums[0]);
//	int returnSize;
//	int* ans = getConcatenation(nums, numsSize, &returnSize);
//	for (int i = 0; i < returnSize; i++)
//	{
//		printf("%d ", ans[i]);
//	}
//	free(ans);
//	return 0;
//}



int main()
{
	int i = 0, j = 0;
	int** arr = (int**)malloc(3 * sizeof(int*));
	if (arr == NULL)
	{
		printf("failed\n");
		return -1;
	}

	for (i = 0; i < 3; i++)
	{
		arr[i] = (int*)malloc(5 * sizeof(int));
		if (arr[i] == NULL)
		{
			printf("failed\n");
			for (int k = 0; k < i; k++)
			{
				free(arr[k]);
			}
			free(arr);
			return -1;
		}
	}
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 5; j++)
		{
			arr[i][j] = i * 5 + j;
			printf("arr[%d][%d] = %d\n", i, j, arr[i][j]);
		}
	}
	for (i = 0; i < 3; i++)
	{
		free(arr[i]);
	}
	free(arr);

	return 0;
}